package com.passion.fs.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.passion.base.AbstractMpEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import java.util.Date;

/**
 * 【t_fs_file_info】表实体类;
 * 表备注：上传文件记录表
 * @author ZhuYin<zyexplorej2ee@sina.com>
 * @since  2025年01月06日
 */
@ApiModel(value = "上传文件记录表")
@EqualsAndHashCode(callSuper = false)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_fs_file_info")
public class FileInfo extends AbstractMpEntity<FileInfo, String> {

    /** 主键ID */
    @ApiModelProperty(name = "主键ID")
    @TableId
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "JDBC")
    private String id;
    
    /** 父级ID */
    @ApiModelProperty(name = "父级ID")
    private String parentId;

    /** 存储桶名称，可以用来分门别类地存储上传的文件 */
    @ApiModelProperty(name = "存储桶名称")
    private String bucketName;
    
    /** 文件原始名称 */
    @ApiModelProperty(name = "文件原始名称")
    private String originalName;

    /** 文件系统中的名称，id+后缀名 */
    @ApiModelProperty(name = "文件系统中的名称，id+后缀名")
    private String fileSysName;

    /** 显示名称 */
    @ApiModelProperty(name = "显示名称")
    private String showName;

    /** 文件扩展名 */
    @ApiModelProperty(name = "文件扩展名")
    private String fileExt;

    /**
     * 文件类型：bucket-存储桶 dir-目录 imageFile-图片文件 normalOfficeFile-常规office文件 codeFile-代码文件 zipFile-压缩文件 ...
     * 该字段用来给前端做选用文件图标的判断
     */
    @ApiModelProperty(name = "文件类型")
    private String fileType;
    
    /** 文件大小，单位:字节 */
    @ApiModelProperty(name = "文件大小，单位:字节")
    private Long fileSize;

    /** 文件md5值 */
    @ApiModelProperty(name = "文件md5值")
    private String fileMd5;
    
    /** 是否是文件夹：1-是 0-否 */
    @ApiModelProperty(name = "是否是文件夹：1-是 0-否")
    private Integer dirFlag;
    
    /** 文件存储路径 */
    @ApiModelProperty(name = "文件存储路径")
    private String filePath;

    /** 文件加密串 */
    @ApiModelProperty(name = "文件加密串")
    private String secretKey;
    
    /** 文件访问地址 */
    @ApiModelProperty(name = "文件访问地址")
    private String accessUrl;
    
    /** 来源类型：local-本地上传 */
    @ApiModelProperty(name = "来源类型：local-本地上传")
    private String sourceType;

    /** 删除标识：0-正常 1-删除 */
    @ApiModelProperty(name = "删除标识：0-正常 1-删除")
    private String delFlag;
    
    /** 上传时间 */
    @ApiModelProperty(name = "上传时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    
    /** 上传者ID */
    @ApiModelProperty(name = "上传者ID")
    @TableField(fill = FieldFill.INSERT)
    private String createId;
}
